home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / vaccine.doc < prev    next >
Text File  |  1995-03-31  |  5KB  |  125 lines

  1.                 * * * * * * * * * * * * * * * * 
  2.                 *                             * 
  3.                 *    V I R U S   A L E R T    * 
  4.                 *                             * 
  5.                 * * * * * * * * * * * * * * * * 
  6.  
  7. Article by Joe Horn 
  8. Disinfectant programs by Brian Maguire 
  9.  
  10. "Next to a battle lost, the greatest misery is a battle gained." 
  11.   --  Wellington 
  12.  
  13. It was just a matter of time.  Three viruses (all very similar) have 
  14. been written for the HP 48.  As if this weren't bad enough, they are 
  15. being spread around on college campuses as a practical joke.  Not 
  16. funny at all, when it's your 48 that gets sick, then goes psychotic, 
  17. and finally dies. 
  18.  
  19. I must admit, however, a certain morbid respect for the author(s); 
  20. these little timebombs are well written.  When stripped from their 
  21. host program, they look like this harmless little 3-object snippit: 
  22.  
  23.                     "b" External Code 
  24.  
  25. where the "b" is the null character (displayed as a little square blob). 
  26. The "External" is not at all what it appears to be!  It's really an 
  27. "external type 2" object, one of the four unused object types; and it 
  28. contains the real body of the virus, in System RPL.  The subsequent 
  29. Code object merely jumps backwards into the External object, just past 
  30. its object header, thus executing its contents as an RPL program. 
  31.  
  32. If you engage in promiscuous I/O with college students (who doesn't?), 
  33. be on the lookout for the following bogus "error messages": 
  34.  
  35.                     "System Malfunction" 
  36.                     "Defective ROM" 
  37.                     "Damaged ROM" 
  38.                     "Invalid Addressing" 
  39.  
  40. Also, the virus attaches itself to other program objects in the 
  41. current directory (thereby earning the name "virus").  Since it 
  42. modifies objects without your knowledge, it may wreak havoc that the 
  43. author(s) never intended, especially if you are into System RPL 
  44. programming.  It may cause objects to be purged, entire directories to 
  45. be lost, memory corrupted, and even total Memory Clear.  And the null 
  46. character at the beginning prevents you from removing the virus by 
  47. normal editing, because when you hit EDIT you'll get the "Can't Edit 
  48. Null Char." error message.  This sucker not only propagates itself, it 
  49. even has self-preservation instincts!  Geez. 
  50.  
  51. Since the current "strains" of this virus all contain the same Code 
  52. object, it's easy to write a "vaccine" that checks a program for the 
  53. virus, and if found, "disinfects" it.  If you'd like to do it 
  54. yourself, here's the recognizable 29.5-byte Code object: 
  55.  
  56. In ASC-> format: 
  57.  
  58. %%HP:T(1); 
  59. "CCD20630001741433450000EA1411C414334A0000CA14134E8F60DA808C4ECA" 
  60.  
  61. Source code: 
  62.  
  63.        HP                AG             opcode 
  64.     --------        ------------        -------- 
  65.     D1=D1+ 5        ADD.A #5,D1         174 
  66.     A=DAT1 A        MOVE.A @D1,A        143 
  67.     LC(5) 5         MOVE.P5 #5,C        3450000 
  68.     A=A-C A         SUB.A C,A           EA 
  69.     DAT1=A A        MOVE.A A,@D1        141 
  70.     D1=D1- 5        SUB.A #5,D1         1C4 
  71.     A=DAT1 A        MOVE.A @D1,A        143 
  72.     LC(5) 10        MOVE.P5 #A,C        34A0000 
  73.     A=A+C A         ADD.A C,A           CA 
  74.     DAT1=A A        MOVE.A A,@D1        141 
  75.     LC(5) #06F8E    MOVE.P5 #06F8E,C    34E8F60 
  76.     A=C A           MOVE.A C,A          DA 
  77.     PC=(A)          JUMP.A @A           808C 
  78.  
  79. The "External" object immediately precedes this Code object.  It 
  80. consists of its five-nibble prolog (02BCC), followed by a five-nibble 
  81. length field (nib distance to the following Code object).  The length 
  82. field is immediately followed by an RPL program object (beginning 
  83. D9D20, of course), which is the nucleus of the virus, the part that 
  84. does all the dirty work; the "DNA" part, as it were. 
  85.  
  86. For obvious reasons, I will not publish the virus itself. 
  87.  
  88. Brian Maguire considered this sordid situation to be a delightful 
  89. programming challenge, and whipped up the following two programs. 
  90. 'VACCINE.1' disinfects program objects, and 'CLEAN' disinfects entire 
  91. directories. 
  92.  
  93. INSTRUCTIONS: Place infected program on stack and press VACCINE.1 
  94. to disinfect it, or run CLEAN to disinfect all the programs in 
  95. the current directory.  Obviously it is best to keep these 
  96. programs protected in a card switched to the ROM position. 
  97. They can be run from there, for example via a CST key or a 
  98. user-mode key assignment. 
  99.  
  100. Here's the source code for the curious and curiouser: 
  101.  
  102. 'VACCINE.1' ( in System RPL ) 
  103. :: CK1NoBlame CK&DISPATCH0 EIGHT 
  104.   :: BEGIN 
  105.     :: DUPLENCOMP #2= NOTcase FALSE DUP TWO NTHCOMPDROP 
  106.       DTYPECOL? NOTcase DROPFALSE DUPLENCOMP #3= NOTcase 
  107.       DROPFALSE THREE NTHCOMPDROP ' 
  108.       CODE 49 1741433450000EA1411C414334A0000CA14134E8F60DA808C 
  109.       EQUAL 
  110.     ; WHILE CARCOMP REPEAT 
  111.   ; 
  112.  
  113. 'CLEAN' ( in User RPL ) 
  114. \<< 8 TVARS LIST\-> 1 SWAP 
  115.   FOR i DUP RCL VACCINE.1 SWAP STO 
  116.   NEXT 
  117. \>> 
  118.  
  119. VACCINE on this disk is an HP 48 directory which contains both of the 
  120. above programs. 
  121.  
  122. Many thanx to Brian Maguire for making this potentially terrifying 
  123. situation so easy to cope with. 
  124.